package Viper

import (
	"fmt"
	"yz-go/config"
	"yz-go/global"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

var ServerConfig = config.ServerConfig{}

func ViperTest() {
	//fmt.Println(GetEnvInfo("GO_TEST")) // *** 参数就是当前计算机的环境变量的 key。注意不能启动多个goland 配置完成之后要刷新使得环境变量生效

	v := viper.New() // 还有一种方式 go.ini来做读取配置文件

	// 设置配置文件 【可以去运行-编辑配置-工作目录】 查看工作路径是哪里的 当前运行的根目录就是哪
	v.SetConfigFile("config-develop.yml") // 路径是个问题 如果找不到就到当前运行的目录中去执行

	if err := v.ReadInConfig(); err != nil {

		panic(err)
	}

	// fmt.Printf("%v", v.Get("name")) // 获取配置文件中的key值

	ServerInfo := &ServerConfig

	err := v.Unmarshal(&ServerInfo)
	if err != nil {
		panic(err)
	}

	// 打印结果 {全局 {127.0.0.1 6379}}
	// fmt.Printf("配置文件信息：%#v\n", ServerInfo)

	// 动态监控配置文件的变化
	v.WatchConfig()
	v.OnConfigChange(func(in fsnotify.Event) {
		fmt.Println("config file changed... ")

		// 重新读取配置文件
		_ = v.ReadInConfig()         // 全部忽略 直接读取
		_ = v.Unmarshal(&ServerInfo) // 全部忽略 直接读取
	})

	// 把配置信息赋值给global
	global.Config = ServerInfo
}
